大家好!
我們進入今天的主題吧!
如果要推入項目至陣列,我們會使用原型方法。
但是,為什麼判斷陣列不能使用原型方法呢?
/* 原型方法 */
([]).push(0); // 1
({}).push(0); // TypeError: {}.push is not a function
/* 靜態方法 */
Array.isArray([]); // true
Array.isArray({}); // false
正如我們昨天提到的:
陣列和物件的方法不能共用,是因為它們擁有不同的特性。
當我們建立一個功能是判斷陣列的原型方法時,就只能應用於陣列而已,實在是沒有意義。
如果硬要檢查不是陣列的型別,就會出現昨天的 TypeError
錯誤,因為只有陣列才能使用這個方法。
簡而言之,只要確定操作對象是使用建構函式建立的物件就使用原型方法;反之,則使用靜態方法。
Ironman.progress = function (date) {
let c = new Date(date);
let p = (c - new Date('2021-09-15')) / 86400000 / 30 * 100;
return Math.round(p) + '%';
};
Ironman.progress('2021-09-23'); // '27%'
Ironman.progress('2021-10-15'); // '100%'
當函式的操作對象不同於原型方法的操作對象時,但是又想要將函式和建構函式打包在一起,此時就會寫成靜態方法,上方的程式碼就是一個舉例。
執行原型方法必須要先建立物件,靜態方法則不需要,因為靜態方法就和一般的函示沒有兩樣,限制也比較少,更能處理較多的資料型別。
差不多也到尾聲了。
如果對文章有任何疑問,歡迎於下方提問和建議!
我是 Felix,我們明天再見!